#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<cstdio>
#include<algorithm>
#define debug(a) cout<<#a<<"="<<a<<endl;
using namespace std;
const int maxn = 20;
typedef long long LL;
LL dp[maxn][maxn];
LL a[maxn], tot = 0,now;
LL dfs(LL pos, LL cnt, bool lead, bool limit) {
    if (pos == 0) return cnt;
    if (!limit&&dp[pos][cnt]!=-1) { return dp[pos][cnt];}
    LL bound = (limit ? a[pos] : 9);
    LL ans=0;
    for (LL i = 0; i <= bound; i++) {
        if (lead && i == 0) {
             ans += dfs(pos - 1, 0, 1, i == bound && limit);
        }
        else if (lead && (i != 0)) {
             ans += dfs(pos - 1, cnt+(i==now), 0, i == bound && limit);
        }
        else {
             ans += dfs(pos - 1, cnt+(i==now), 0, i == bound && limit);
        }
    }
    if (!limit && !lead) {
        dp[pos][cnt]=ans;
    }
    return ans;
}
LL solve(LL x) {
    memset(a, 0, sizeof(a));
    memset(dp,-1,sizeof(dp));
    tot=0;
    while (x) {
        a[++tot] = x % 10; x /= 10;
    }
    return dfs(tot, 0, 1, 1);
}
int main(void) {
    //freopen("data.in","r",stdin);
    //freopen("sol.out","w",stdout);
    LL l,r;cin>>l>>r;
    for (int i = 0; i < 10; i++) {
        now=i;
        cout<<solve(r)-solve(l-1)<<" ";
    }cout<<endl;
    return 0;
}

